package cn.myzqu.sign.common.message.wechat;


import cn.myzqu.sign.common.message.common.SendResult;
import cn.myzqu.sign.common.miniprogram.utils.HttpRequestUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 微信服务信息发送接口
 * @Author: 的川
 * @Date: 2018/11/16
 */
@Data
@Slf4j
public class WeChatMessageTemplate {

    /**
     * 接收者（用户）的 openid
     */
    private String touser;
    /**
     * 所需下发的模板消息的id
     */
    private String templateId;
    /**
     * 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
     */
    private String page;
    /**
     * 表单提交场景下，为 submit 事件带上的 formId；支付场景下，为本次支付的 prepay_id
     */
    private String formId;
    /**
     * 模板内容，不填则下发空模板
     */
    private Map<String,Map<String ,String>> data = new HashMap<>();
    private String template ;

    /**
     * 添加模本关键字
     * @param index
     * @param value
     */
    public void addKeyWord(int index,String value){
        Map<String ,String> keyword = new HashMap<>();
        keyword.put("value",value);
        //将{1}替换为实际参数
        this.template = this.template.replace("{"+index+"}",value);
        data.put("keyword"+index,keyword);
    }

    /**
     * 发送单条微信信息
     * @return
     */
    public SendResult send(String token){
        SendResult sendResult = new SendResult();
        String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/" +
                "send?access_token="+ token;
        Map params = new HashMap();
        params.put("touser",this.touser);
        params.put("template_id",this.templateId);
        params.put("page",this.page);
        params.put("form_id",this.formId);
        params.put("data",this.data);
        String json = JSONObject.toJSONString(params);
        JSONObject jsonObject = JSONObject.parseObject(json);
        JSONObject result = HttpRequestUtil.doPost(url,jsonObject);
        sendResult.setCode(String.valueOf(result.get("errcode")));
        sendResult.setMsg(String.valueOf(result.get("errmsg")));
        sendResult.setContent(template);
        return sendResult;
    }


    public static void main(String[] args){
        WeChatMessageTemplate wechatTemplateMessage = new WeChatMessageTemplate();
        wechatTemplateMessage.setTemplateId("5-0WcGbYY82mzUL5tcyR0F1C_jdR8zNBP3YcylUxfLo");
        wechatTemplateMessage.setPage("pages/subscribe/index");
        wechatTemplateMessage.setFormId("1541925032497");
        wechatTemplateMessage.setTouser("oxdXx5Avz4AjbA2skKf6Jqih0OOU");
        //活动名称
        wechatTemplateMessage.addKeyWord(1, "系统测试，多有打扰，请见谅");
        //活动时间
        String activityTime = "2018-10-11 11:30";
        wechatTemplateMessage.addKeyWord(2, activityTime);
        //活动地点
        wechatTemplateMessage.addKeyWord(3, "系统测试，多有打扰，请见谅");
        wechatTemplateMessage.addKeyWord(4, "系统测试，多有打扰，请见谅");
        wechatTemplateMessage.addKeyWord(5, "系统测试，多有打扰，请见谅");
        String token = "token";
        SendResult sendResult = wechatTemplateMessage.send(token);
        log.info(sendResult.toString());
    }

}
